package com.cj.common.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


public class AppInfo {
	protected static Logger logger = LoggerFactory.getLogger(AppInfo.class);
	
	public static final String CLASS_PATH;
	public final static String csvPath = "csv"; // csv文件存放路径
    /** sys_config.properties文件的内容 */
    private final static Properties configProp;
    
    private final static String PROPERTIES_FILE = "/config.properties";
    static{
    	CLASS_PATH = getClassesPath(AppInfo.class);
    	configProp = new Properties();
    	try {
			configProp.load(new FileInputStream(CLASS_PATH + PROPERTIES_FILE));
		} catch (FileNotFoundException e) {
			logger.error("config.properties文件不存在", e);
		} catch (IOException e) {
			logger.error("读取config.properties文件失败!", e);
		}
    }
    
    public static String get(String key){
    	Object value = configProp.getProperty(key);
    	if(value == null){
    		
    		return null;
    	}
    	return value.toString();
    }
    public static Properties getProperties() {
    	return configProp;
    }

	/**
	 * -----------------------------------------------------------------------
	 * getAppPath需要一个当前程序使用的Java类的class属性参数，它可以返回打包过的
	 * Java可执行文件（jar，war）所处的系统目录名或非打包Java程序所处的目录
	 * 
	 * @param cls为Class类型
	 *@return 返回值为该类所在的Java程序运行的目录
	 *         ----------------------------------------------
	 *         ---------------------------
	 */
	public static String getClassesPath(Class cls) {
		// 检查用户传入的参数是否为空
		if (cls == null) {
			throw new java.lang.IllegalArgumentException("参数不能为空！");
		}
		ClassLoader loader = cls.getClassLoader();
		// 获得类的全名，包括包名
		String clsName = cls.getName() + ".class";
		// 获得传入参数所在的包
		Package pack = cls.getPackage();
		String path = "";
		// 如果不是匿名包，将包名转化为路径
		if (pack != null) {
			String packName = pack.getName();
			// 此处简单判定是否是Java基础类库，防止用户传入JDK内置的类库
			if (packName.startsWith("java.") || packName.startsWith("javax.")) {
				throw new java.lang.IllegalArgumentException("不要传送系统类！");
			}
			// 在类的名称中，去掉包名的部分，获得类的文件名
			clsName = clsName.substring(packName.length() + 1);
			// 判定包名是否是简单包名，如果是，则直接将包名转换为路径，
			if (packName.indexOf(".") < 0) {
				path = packName + "/";
			} else {// 否则按照包名的组成部分，将包名转换为路径
				int start = 0, end = 0;
				end = packName.indexOf(".");
				while (end != -1) {
					path = path + packName.substring(start, end) + "/";
					start = end + 1;
					end = packName.indexOf(".", start);
				}
				path = path + packName.substring(start) + "/";
			}
		}
		// 调用ClassLoader的getResource方法，传入包含路径信息的类文件名
		java.net.URL url = loader.getResource(path + clsName);
		// 从URL对象中获取路径信息
		String realPath = url.getPath();
//		if (realPath.startsWith("/")) {   //--与linux兼容   有/  win也不会出错
//			realPath = realPath.substring(1, realPath.length());
//		}
		// 去掉路径信息中的协议名"file:"
		int pos = realPath.indexOf("file:");
		if (pos > -1) {
			realPath = realPath.substring(pos + 5);
		}
		// 去掉路径信息最后包含类文件信息的部分，得到类所在的路径
		pos = realPath.indexOf(path + clsName);
		realPath = realPath.substring(0, pos - 1);
		// 如果类文件被打包到JAR等文件中时，去掉对应的JAR等打包文件名
		if (realPath.endsWith("!")) {
			realPath = realPath.substring(0, realPath.lastIndexOf("/"));
		}
		/*
		 * ------------------------------------------------------------
		 * ClassLoader的getResource方法使用了utf-8对路径信息进行了编码，当路径
		 * 中存在中文和空格时，他会对这些字符进行转换，这样，得到的往往不是我们想要
		 * 的真实路径，在此，调用了URLDecoder的decode方法进行解码，以便得到原始的 中文及空格路径
		 * -------------------------------------------------------------
		 */
		try {
			realPath = java.net.URLDecoder.decode(realPath, "utf-8");
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
		return realPath;
	}// getAppPath定义结束

	public static String getAppPath() {
		return CLASS_PATH.substring(0, CLASS_PATH.indexOf("WEB-INF"));
	}
	public static void main(String[] args) {
		System.out.println(getAppPath());
		System.out.println(CLASS_PATH);
		File file = new File(CLASS_PATH);
		System.out.println(file.exists());
	}
}
